package com.suneee.store.service;

import java.util.List;
import java.util.Map;

import com.suneee.context.page.Page;
import com.suneee.store.bean.AdjustStock;
import com.suneee.store.bean.ProductDTO;
import com.suneee.store.bean.ViewStockRecordDTO;
import com.suneee.store.bean.ViewVirtualDepotDTO;
import com.suneee.store.entity.Sku;
import com.suneee.store.entity.Spu;
import com.suneee.store.entity.StockRecord;
import com.suneee.store.entity.StockTemp;
import com.suneee.store.entity.ViewNoStockRecordSku;
import com.suneee.web.bean.DownloadInfo;

public interface ProductService {

	/**
	 * 商品新增
	 * @param product
	 */
	public void add(Spu product);
	
	/**
	 * 调整库存
	 * @param stockList
	 */
	public void adjustStock(List<AdjustStock> stockList);
	/**
	 * 获得单个sku
	 * @param skuId
	 * @param enterpriseCode
	 * @return
	 */
	public Sku selectSku(Integer skuId);
	/**
	 * 查看商品
	 * @param dto
	 * @return
	 */
	public Page<Spu> listView(ProductDTO dto);
	/**
	 * 出库 
	 * @param record
	 */
	public void storeManage(StockRecord record);
	
	/**
	 * 出、入库单查询
	 * @param dto
	 * @return
	 */
	public Page<Map<String,Object>> stockRecordlistView(ViewStockRecordDTO dto);
	
	/**
	 * 插入一条库存记录
	 * @param record
	 * @param flag
	 */
	public void insertStockRecord(StockRecord record,String flag);
	
	/**
	 * 查看虚拟总仓商品
	 * @param dto
	 * @return
	 */
	public Page<Map<String,Object>> ListVirtualDepot(ViewVirtualDepotDTO dto);
	
	/**
	 * 导出虚拟总仓商品
	 * @return
	 */
	public DownloadInfo exportFile(Integer[] skuIds,String title,Integer spuId,Integer skuId,String categoryCode);
	
	/**
	 * 虚拟总仓生成入库记录
	 * @param skuList
	 * @param inTypeFlag
	 * @param operateStore
	 */
	public void inStockNewRecord(List<Sku> skuList,String inTypeFlag,Integer operateStoreId,String remark);
	
	/**
	 * 保存虚拟总仓入库记录
	 * @param skuList
	 */
	public void saveStcokInRecord(List<StockTemp> list,String stockType,String remark);
	
	/**
	 * 获得尚未入库的商品
	 * @return
	 */
	public List<ViewNoStockRecordSku> getNoStockRecordSku();
	
	/**
	 * 保存库存缓存
	 * @param tempList
	 */
	public void saveStockTemp(List<Sku> tempList,String stockType);
	
	/**
	 * 获得企业的所有spu（分页）
	 * @return
	 */
	public Page<Spu> getSpuPage();
	
	/**
	 * 单个spuId获得Sku
	 * @param spuId
	 * @return
	 */
	public List<Sku> queryForListBySpuId(Integer spuId);
	
	/**
	 * 根据类目编码获取该类目上级名称
	 * 
	 * @param categoryCode
	 * @return
	 */
	public String getCategoryNames(String categoryCode);
	
	/**
	 * 
	 * @param dto
	 * @return
	 */
	public Page<Map<String, Object>> mapView(ProductDTO dto);
}
